import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution46 {
    public static void main(String[] args) {
       int[] arr = {1 , 2 , 3} ;
       permute(arr) ;
    }
    static List<List<Integer>> list = new ArrayList<>() ;
    static  public List<List<Integer>> permute(int[] nums) {
        int len = nums.length ;
        for(int i :nums){
            List<Integer> ret = new ArrayList<>() ;
            ret.add(i) ;
            boolean[] hash = new boolean[21] ;
            hash[i+10]  = true ;
            dfs(nums ,ret ,len-1 ,hash );
        }
        return list ;
    }
    static  private void dfs(int[] nums , List<Integer> ret  ,  int len , boolean[] hash){
        if(len <= 0) {
            list.add(ret) ;
            return  ;
        }
        for(int i : nums){
            if(hash[i+10] == false){
                boolean[] newhash = hash.clone();
                newhash[i+10] = true ;
                List<Integer> newret = new ArrayList<>(ret);
                newret.add(i) ;
                dfs(nums , newret , len-1 , newhash);
            }
        }
    }



}